/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sistema.aplicacao;

import com.sistema.tools.Md5;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import com.sistema.db.*;

/**
 *
 * @author geraldo
 */
public class FormUsuario extends JDialog
{

    private JTextField txtNome;
    private JTextField txtSetor;
    private JComboBox cbxTipoUsuario;
    private JTextField txtLogin;
    private JPasswordField txtSenha;
    private JLabel lblTitulo;
    private JButton btnOk;
    private JButton btnCancelar;
    private String nome;
    private String setor;
    private String login;
    private String senha;
    private String loginInicial ="";
    private int tipoUsuario;
    private int id;

    public FormUsuario()
    {

        setTitle( "Controle de Ligações Suporte" );
        setSize( 550, 500 );
        setLayout( null );
        setLocationRelativeTo( null );
        iniciaComponentes();
        actions();
        setModal( true );
        setVisible( true );

    }

    public FormUsuario( String nome, String setor, String login, String senha, int tipo_usuario, int id )
    {
        setTitle( "Controle de Ligações Suporte" );
        setSize( 550, 500 );
        setLayout( null );
        setLocationRelativeTo( null );

        this.nome = nome;
        this.setor = setor;
        this.login = login;
        this.senha = senha;
        this.tipoUsuario = tipo_usuario;
        this.id = id;

        loginInicial();
        iniciaComponentes();
        actions();




        setComponentes();

        setModal( true );
        setVisible( true );

    }

    public void iniciaComponentes()
    {
        add( lblTitulo = new JLabel( "Cadastro de Usuários" ) ).setBounds( 200, 20, 400, 60 );
        Font font_titulo = new Font( "Arial", Font.BOLD, 18 );
        lblTitulo.setFont( font_titulo );

        add( new JLabel( "Nome:" ) ).setBounds( 70, 100, 80, 30 );
        add( txtNome = new JTextField() ).setBounds( 160, 100, 300, 30 );
        add( new JLabel( "Setor:" ) ).setBounds( 70, 160, 80, 30 );
        add( txtSetor = new JTextField() ).setBounds( 160, 160, 300, 30 );

        Vector vctTipoUsuario = new Vector();
        Banco conn = new Banco();

        vctTipoUsuario.addElement( "" );

        try
        {
            ResultSet rs = conn.executarConsulta( "SELECT id,descricao FROM categoria_usuario" );
            while ( rs.next() )
            {
                vctTipoUsuario.addElement( rs.getString( "descricao" ) );

            }
        } catch ( Exception e )
        {
        }

        conn.fecha();

        add( new JLabel( "Categoria: " ) ).setBounds( 70, 220, 80, 30 );
        add( cbxTipoUsuario = new JComboBox( vctTipoUsuario ) ).setBounds( 160, 220, 300, 30 );
        add( new JLabel( "Login: " ) ).setBounds( 70, 280, 80, 30 );
        add( txtLogin = new JTextField() ).setBounds( 160, 280, 300, 30 );
        add( new JLabel( "Senha: " ) ).setBounds( 70, 340, 80, 30 );
        add( txtSenha = new JPasswordField() ).setBounds( 160, 340, 300, 30 );

        add( btnOk = new JButton( "Ok" ) ).setBounds( 180, 400, 120, 30 );
        add( btnCancelar = new JButton( "Cancelar" ) ).setBounds( 320, 400, 120, 30 );

    }

    public void setComponentes()
    {
        txtLogin.setText( this.login );
        txtSenha.setText( this.senha );
        txtSetor.setText( this.setor );
        txtNome.setText( this.nome );
        cbxTipoUsuario.setSelectedIndex( this.tipoUsuario );
    }

    public void loginInicial()
    {
        Banco conn = new Banco();
        ResultSet rs = conn.executarConsulta( "SELECT login FROM usuarios WHERE id=" + id +  "");
        conn.fecha();
        try
        {
            while(rs.next())
            {
                loginInicial = rs.getString( "login" );
            }

        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    public void actions()
    {
        btnCancelar.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {
                dispose();
            }
        } );

        btnOk.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {
                String nome = txtNome.getText();
                String setor = txtSetor.getText();
                int categoria = cbxTipoUsuario.getSelectedIndex();
                String login = txtLogin.getText();
                String s = txtSenha.getText();
                String senha = "";


                try
                {
                    senha = Md5.md5( s );
                } catch ( Exception e )
                {
                    JOptionPane.showMessageDialog( null, "Erro ao realizar o cadastro: \n " + e, "Mensagem", JOptionPane.ERROR_MESSAGE );
                    return;
                }


                //Valida os campos do formulario dos usuários
                if ( nome.equalsIgnoreCase( "" ) )
                {

                    JOptionPane.showMessageDialog( null, "Favor preencher o campo NOME" );
                    return;
                }

                if ( setor.equalsIgnoreCase( "" ) )
                {

                    JOptionPane.showMessageDialog( null, "Favor preencher o campo SETOR" );
                    return;
                }

                if ( categoria == 0 )
                {

                    JOptionPane.showMessageDialog( null, "Favor selecionar uma CATEGORIA" );
                    return;
                }

                if ( login.equalsIgnoreCase( "" ) )
                {

                    JOptionPane.showMessageDialog( null, "Favor preencher o campo LOGIN" );
                    return;
                }

                if ( senha.equalsIgnoreCase( "" ) )
                {

                    JOptionPane.showMessageDialog( null, "Favor preencher o campo SENHA" );
                    return;
                }

                //Verifica se Login ja está sendo utilizado=
                Banco VerificaLogin = new Banco();
                ResultSet consulta = VerificaLogin.executarConsulta( "SELECT id,senha, count(*) as qtde FROM usuarios WHERE login in ('" + login +"', '" + loginInicial +"') GROUP BY login " );
                int qtdeLogin = 0;
                int idLogin = 0;
                String senhaLogin = "";

                try
                {
                    while(consulta.next()){
                       qtdeLogin = consulta.getInt( "qtde" );
                       idLogin = consulta.getInt( "id" );
                       senhaLogin = consulta.getString( "senha" );
                    }
                    
                } catch ( Exception e )
                {
                    e.printStackTrace();
                }
                VerificaLogin.fecha();


                //Registra o usuário no banco
                if ( id != 0 )
                {

                    try
                    {
                        if(( qtdeLogin != 0 ) && ( idLogin != id ))
                        {
                            JOptionPane.showMessageDialog( null, " Favor utilizar outro login este já está sendo utilizado! " );
                            return;
                        }

                        Banco conn = new Banco();

                        if(!senhaLogin.equalsIgnoreCase( s ))
                        { 
                            conn.updateUsuarioAlteraSenha( id, login, senha, nome, setor, categoria );
                        }else
                        {
                            conn.updateUsuario( id, login, nome, setor, categoria );
                        }

                        conn.fecha();
                        dispose();

                        JOptionPane.showMessageDialog( null, "Registro alterado com sucesso!" );

                    } catch ( Exception e )
                    {

                        e.printStackTrace();

                    }

                } else
                {


                    try
                    {

                        if ( qtdeLogin != 0 )
                        {
                            JOptionPane.showMessageDialog( null, " Favor utilizar outro login este já está sendo utilizado! " );
                            return;
                        }
                        
                        Banco conn = new Banco();
                        String a = "0000-00-00 00:00:00";

                        conn.insertUsuario( login, senha, nome, setor, categoria, a );


                        conn.fecha();
                        dispose();

                        JOptionPane.showMessageDialog( null, "Registro realizado com sucesso!" );

                    } catch ( Exception e )
                    {

                        e.printStackTrace();

                    }
                }

                DialogAdminUsuarios.atualizaTela();


            }
        } );

    }
}
